package com.ghyf.mplay.engineImpl;

import java.io.File;
import java.io.FileInputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Locale;

import org.xmlpull.v1.XmlPullParser;

import android.text.TextUtils;
import android.text.format.Time;
import android.util.Xml;

import com.ghyf.mplay.application.UserInfoSingleton;
import com.ghyf.mplay.bean.BaseModuleInfo;
import com.ghyf.mplay.bean.CountDownInfo;
import com.ghyf.mplay.bean.DateInfo;
import com.ghyf.mplay.bean.ExigentInfo;
import com.ghyf.mplay.bean.GlobalParamInfo;
import com.ghyf.mplay.bean.LayoutInfo;
import com.ghyf.mplay.bean.PicShowInfo;
import com.ghyf.mplay.bean.PlaylistInfo;
import com.ghyf.mplay.bean.ScrollInfo;
import com.ghyf.mplay.bean.TextInfo;
import com.ghyf.mplay.bean.TimeInfo;
import com.ghyf.mplay.bean.VideoInfoView;
import com.ghyf.mplay.datatype.AlignMode;
import com.ghyf.mplay.datatype.BackParam;
import com.ghyf.mplay.datatype.BackType;
import com.ghyf.mplay.datatype.ClockType;
import com.ghyf.mplay.datatype.ConvertItem;
import com.ghyf.mplay.datatype.DateParam;
import com.ghyf.mplay.datatype.DateShow;
import com.ghyf.mplay.datatype.FontParam;
import com.ghyf.mplay.datatype.Frame;
import com.ghyf.mplay.datatype.GradientColorType;
import com.ghyf.mplay.datatype.LayoutItem;
import com.ghyf.mplay.datatype.LocalPlayItem;
import com.ghyf.mplay.datatype.MDShow;
import com.ghyf.mplay.datatype.ModuleItem;
import com.ghyf.mplay.datatype.POS;
import com.ghyf.mplay.datatype.RGBA;
import com.ghyf.mplay.datatype.ShowLang;
import com.ghyf.mplay.datatype.ShowType;
import com.ghyf.mplay.datatype.YearShow;
import com.ghyf.mplay.engine.XmlParser;

import com.ghyf.mplay.util.LogUtil;
import com.ghyf.mplay.value.ConstantValue;

/**
 * xml文件的解析器实现类
 * 
 * @author 陈小红
 * 
 */
public class XmlparserImpl implements XmlParser {
	private static final String TAG="XmlparserImpl";
	private File file=null;
	private XmlPullParser parser=null;
	private RGBA color=null;
	private Frame frame=null; // 帧时间
	private POS pos=null; // 模块位置
	private BackParam backgroud=null;

	
	
	
	/* (non-Javadoc)
	 * @see com.ghyf.mplay.engine.XmlParser#parseGlobalParam(java.lang.String)
	 */
	@Override
	public GlobalParamInfo parseGlobalParam(String path) throws Exception {
		GlobalParamInfo paramInfo=null;
		file = new File(path);
		FileInputStream fis=null;
		try{
			fis= new FileInputStream(file); // 获取待解析文件的输入流
			parser = Xml.newPullParser();
			parser.setInput(fis, ConstantValue.CHARSET);
			int type = parser.getEventType();// 获取解析器解析的事件类型
			while (type != XmlPullParser.END_DOCUMENT) {
				switch (type) {
				case XmlPullParser.START_TAG:// 标签或者节点开始时候的事件
					if ("params".equals(parser.getName())) {
						
						paramInfo = new GlobalParamInfo();
						
					}else if("host".equals(parser.getName())){
						
						paramInfo.setHost(parser.nextText());
						
					}else if("root_dir".equals(parser.getName())){
						
						paramInfo.setRoot_dir(parser.nextText());
						
					}
					else if("out_resolution".equals(parser.getName())){
						paramInfo.setOut_resolution(parser.nextText());
					}
					else if("monitor_port".equals(parser.getName())){
						String monitor_port=parser.nextText();
						if(null!=monitor_port&&!"".equals(monitor_port)){
							paramInfo.setMonitor_port(Integer.parseInt(monitor_port));
						}
					}else if("data_port".equals(parser.getName())){
						String data_port=parser.nextText();
						if(null!=data_port&&!"".equals(data_port)){
							paramInfo.setData_port(Integer.parseInt(data_port));
						}
					}else if("live_url".equals(parser.getName())){
						String live_url=parser.nextText();
						paramInfo.setLive_url(live_url);
						
					}else if("screen_control_port".equals(parser.getName())){
						String screen_control_port=parser.nextText();
						paramInfo.setScreen_control_port(screen_control_port);
					}else if("watchdog_interval".equals(parser.getName())){
						String watchdog_interval=parser.nextText();
						if(null!=watchdog_interval&&!"".equals(watchdog_interval)){
							paramInfo.setWatchdog_interval(Integer.parseInt(watchdog_interval));
						}
					}else if("log_host".equals(parser.getName())){
						String log_host=parser.nextText();
						paramInfo.setLog_host(log_host);
						
					}else if("log_dir".equals(parser.getName())){
						String log_dir=parser.nextText();
						paramInfo.setLog_dir(log_dir);
					}
					else if("log_type".equals(parser.getName())){
						String log_type=parser.nextText();
						paramInfo.setLog_type(log_type);
					}else if("log_version".equals(parser.getName())){
						String log_version=parser.nextText();
						paramInfo.setLog_version(log_version);
					}
					else if("log_day".equals(parser.getName())){
						String log_day=parser.nextText();
						if(null!=log_day&&!"".equals(log_day)){
							paramInfo.setLog_day(Integer.parseInt(log_day));
						}
					}else if("upload_interval".equals(parser.getName())){
						String upload_interval=parser.nextText();
						if(null!=upload_interval&&!"".equals(upload_interval)){
							paramInfo.setUpload_interval(Integer.parseInt(upload_interval));
						}
					}else if("start_time".equals(parser.getName())){
						String start_time=parser.nextText();
						paramInfo.setStart_time(start_time);
					}else if("end_time".equals(parser.getName())){
						String end_time=parser.nextText();
						paramInfo.setEnd_time(end_time);
					}else if("line_code".equals(parser.getName())){
						String route_num=parser.nextText();
						paramInfo.setLine_code(route_num);
					}else if("station_code".equals(parser.getName())){
						String station_code=parser.nextText();
						paramInfo.setStation_code(station_code);
					}else if("station_area_code".equals(parser.getName())){
						String station_area_code=parser.nextText();
						paramInfo.setStation_area_code(station_area_code);
					}else if("device_code".equals(parser.getName())){
						String device_code=parser.nextText();
						paramInfo.setDevice_code(device_code);
					}else if("charset".equals(parser.getName())){
						String charset=parser.nextText();
						paramInfo.setCharset(charset);
					}else if("serial".equals(parser.getName())){
						String serial=parser.nextText();
						if(null!=serial&&!"".equals(serial)){
							paramInfo.setSerial(Integer.parseInt(serial));
						}
						
					}
					break;
				case XmlPullParser.END_TAG:
					if ("params".equals(parser.getName())) { // 解析完毕播表，将模板列表加入
						
					}
					break;
				}
				type = parser.next(); // 让解析器 解析下一个节点tag
			}
			
		}catch(Exception e){
			
			LogUtil.e(TAG,"parsePlaylist出错 ", e);
		
		}finally{
			if(fis!=null){
				fis.close();
			}
		}
	
		
		return paramInfo;
	}
	// <?xml version ="1.0" encoding="GB2312"?>
	// <Playlist>
	// <File_Version>1</File_Version>
	// <Playlist_Name>节目单样例</Playlist_Name>
	// <Playlist_Des>节目单样例的描述信息</Playlist_Des>
	// <Playlist_Download>1</Playlist_Download>
	// <Media_Download>1</Media_Download>
	// <Editor>admin</Editor>
	// <EditTime>2010-02-27 16:02:58</EditTime>
	// <Scr_Size>(1920, 1080)</Scr_Size>
	// <Layout_Count>4</Layout_Count>
	// <Layout Name="Template1" Start_Time="00:00:00"/>
	// <Layout Name="Template2" Start_Time="09:00:00"/>
	// <Layout Name="Template3" Start_Time="12:00:00"/>
	// <Layout Name="Template4" Start_Time="18:00:00"/>
	// <Layout Name="Emergency" Start_Time=""/>
	// </Playlist>
	/**
	 * 解析节目单文件
	 * @param path 待解析xml文件的路径
	 * @throws Exception 找不到path路径文件的异常
	 * @return	节目单文件信息的对象
	 */
	@Override
	public PlaylistInfo parsePlaylist(String path) throws Exception {
		PlaylistInfo playlistInfo = null; // 整个播表xml文件的信息bean
		ArrayList<LayoutItem> layout_list = null; // 该播表包含的模板列表
		LayoutItem layoutItem= null; // 模板项
		Time start_time= null;;
		FileInputStream fis=null;
		try{
			String playlist_path = path + "playlist.xml"; // 当前播表文件路径
			file = new File(playlist_path);
			LogUtil.i(TAG, "playlist_path="+playlist_path);
			if(!file.exists()){
				playlist_path = path + "PLAYLIST.XML"; // 当前播表文件路径
				LogUtil.i(TAG, "playlist_path="+playlist_path);
				file = new File(playlist_path);
				if(!file.exists()){
					return null;
				}
			}
			fis = new FileInputStream(file);// 获取待解析文件的输入流
			parser = Xml.newPullParser();
			parser.setInput(fis, ConstantValue.CHARSET);
//			parser.setInput(fis, ConstantValue.CHARSET_GB2312);

			int type = parser.getEventType();// 获取解析器解析的事件类型
			while (type != XmlPullParser.END_DOCUMENT) {
				switch (type) {
				case XmlPullParser.START_TAG:// 标签或者节点开始时候的事件
					if ("Playlist".equals(parser.getName())) {
						playlistInfo = new PlaylistInfo();
						layout_list = new ArrayList<LayoutItem>();
					} else if ("File_Version".equals(parser.getName())) {
						String version = parser.nextText();
						playlistInfo.setVersion(version);
					} else if ("Playlist_Name".equals(parser.getName())) {
						String playlist_name = parser.nextText();
						playlistInfo.setPlaylist_name(playlist_name);
					} else if ("Playlist_Des".equals(parser.getName())) {
						String describe = parser.nextText();
						playlistInfo.setDescribe(describe);
					} else if ("Playlist_Download".equals(parser.getName())) {
						boolean listIfDown;
						String playlist_download = parser.nextText();
						if ("0".equals(playlist_download)) {
							listIfDown = false;
						} else {
							listIfDown = true;
						}
						playlistInfo.setPlaylist_download(listIfDown);
					} else if ("Media_Download".equals(parser.getName())) {
						boolean mediaIfDown;
						String media_download = parser.nextText().trim();
						if ("0".equals(media_download)) {
							mediaIfDown = false;
						} else {
							mediaIfDown = true;
						}
						playlistInfo.setMedia_download(mediaIfDown);
					} else if ("Editor".equals(parser.getName())) {
						String editor = parser.nextText();
						playlistInfo.setEditor(editor);
					} else if ("EditTime".equals(parser.getName())) {
						DateFormat formater = new SimpleDateFormat(
								"yyyy-MM-dd HH:mm:ss", Locale.getDefault());
						String edit_time_str = parser.nextText();
						Date edit_time = formater.parse(edit_time_str);
						playlistInfo.setEdit_time(edit_time);
					} else if ("Scr_Size".equals(parser.getName())) {
						String scr_size_str = parser.nextText();
						int index_mid = scr_size_str.indexOf(",");
						int index_end = scr_size_str.indexOf(")");
						// 截取屏幕宽、高值的字符串并设置。
						int screen_width = Integer.valueOf(scr_size_str.substring(
								1, index_mid).trim());
						int screen_height = Integer.valueOf(scr_size_str.substring(
								index_mid + 1, index_end).trim());
						playlistInfo.setScreen_width(screen_width);
						playlistInfo.setScreen_height(screen_height);
					} else if ("Layout_Count".equals(parser.getName())) {
						int layout_count = Integer.valueOf(parser.nextText());
						playlistInfo.setLayout_count(layout_count);
					} else if ("Layout".equals(parser.getName())) {
						// <Layout Name="Template3" Start_Time="12:00:00"/>
						// <Layout Name="Template4" Start_Time="18:00:00"/>
						// <Layout Name="Emergency" Start_Time=""/>
						int count=parser.getAttributeCount();
						layoutItem = new LayoutItem();
						for(int i=0;i<count;i++){
						
							String name=parser.getAttributeName(i);
							if("Name".equals(name)){
								String layout_name = parser.getAttributeValue(i); // layout标签的第一个属性值（名称）
								if ("emergency".equals(layout_name)) { // 紧急模板不保存到播放模板列表
									
									break;
								}
								
								layoutItem.setLayout_name(layout_name);
							}else if("Start_Time".equals(name)){
								String start_time_str = parser.getAttributeValue(i); // layout标签的第二个属性值（开始时间）
								int hour = 0;
								int minute = 0;
								int sec = 0;
								if (!TextUtils.isEmpty(start_time_str)) {
									String[] split_time = start_time_str.split(":");
									hour = Integer.valueOf(split_time[0]);
									minute = Integer.valueOf(split_time[1]);
									sec = Integer.valueOf(split_time[2]);
								}
								start_time = new Time();
								start_time.set(sec, minute, hour, 0, 0, 0); // 设置开始的时分秒，日期无效，设置为零。
								layoutItem.setStart_time(start_time);
							}
						}
						
//						String layout_name = parser.getAttributeValue(0); // layout标签的第一个属性值（名称）
//						if ("emergency".equals(layout_name)) { // 紧急模板不保存到播放模板列表
//							
//							break;
//						}
//						layoutItem = new LayoutItem();
//						layoutItem.setLayout_name(layout_name);
//						String start_time_str = parser.getAttributeValue(1); // layout标签的第二个属性值（开始时间）
//						int hour = 0;
//						int minute = 0;
//						int sec = 0;
//						if (!TextUtils.isEmpty(start_time_str)) {
//							String[] split_time = start_time_str.split(":");
//							hour = Integer.valueOf(split_time[0]);
//							minute = Integer.valueOf(split_time[1]);
//							sec = Integer.valueOf(split_time[2]);
//						}
//						start_time = new Time();
//						start_time.set(sec, minute, hour, 0, 0, 0); // 设置开始的时分秒，日期无效，设置为零。
//						layoutItem.setStart_time(start_time);
						layout_list.add(layoutItem); // 将模板项加入模板列表
					}
					break;
				case XmlPullParser.END_TAG:
					if ("Playlist".equals(parser.getName())) { // 解析完毕播表，将模板列表加入
						playlistInfo.setLayout_list(layout_list);
					}
					break;
				}
				type = parser.next(); // 让解析器 解析下一个节点tag
			}
		}catch(Exception e){
			
			LogUtil.e(TAG,"parsePlaylist出错 ", e);
		
		}finally{
			if(fis!=null){
				fis.close();
			}
		
		}
	
		return playlistInfo;
	}
	// <?xml version ="1.0" encoding="gb2312"?>
	// <Layout>
	// <File_Version>1</File_Version>
	// <Layout_Name>测试模板</Layout_Name>
	// <Layout_Des>北京PCC文件</Layout_Des>
	// <Editor>admin</Editor>
	// <EditTime>2010-02-27 15:01:57</EditTime>
	// <Scr_Size>(1920, 1080)</Scr_Size>
	// <BKFile>bg.jpg</BKFile>
	// <Module_Count>5</Module_Count>
	// <Module Name ="Video1" UID="8" GID="0" Pos="(0,3,720,400)"
	// ZOrder="1"/>
	// <Module Name ="Text1" UID="11" GID="10" Pos="(0,400,720,50)"
	// ZOrder="2"/>
	// <Module Name ="Text2" UID="12" GID="10" Pos="(0,450,720,50)"
	// ZOrder="3"/>
	// <Module Name ="Scroll1" UID="6" GID="0" Pos="(0,500,720,38)"
	// ZOrder="4"/>
	// <Module Name ="Scroll2" UID="7" GID="0" Pos="(0,538,720,38)"
	// ZOrder="5"/>
	// </Layout>
	/**
	 * 解析布局文件
	 * @param path 待解析xml文件的路径
	 * @throws Exception 找不到path路径文件的异常
	 * @return	布局文件信息的对象
	 */
	@Override
	public LayoutInfo parseLayout(String path) throws Exception {
		
		LayoutInfo layoutInfo = null; // 整个 模板xml文件的信息bean
		ArrayList<ModuleItem> module_list = null; // 该模板包含的模块简单信息列表
		ModuleItem moduleItem = null; ; // 模块简单信息项
		FileInputStream fis =null;
		try{
			String layout_path = path + "LAYOUT.xml"; // 当前播表文件路径
			file = new File(layout_path);
			if(!file.exists()){
				layout_path = path + "LAYOUT.XML"; // 当前播表文件路径
				LogUtil.i(TAG, "playlist_path="+layout_path);
				file = new File(layout_path);
				if(!file.exists()){
					return null;
				}
			}
			
			fis = new FileInputStream(file); // 获取待解析文件的输入流
			parser = Xml.newPullParser();
			parser.setInput(fis, ConstantValue.CHARSET_GB2312);

			int type = parser.getEventType();// 获取解析器解析的事件类型
			while (type != XmlPullParser.END_DOCUMENT) {
				switch (type) {
				case XmlPullParser.START_TAG:// 标签或者节点开始时候的事件
					if ("Layout".equals(parser.getName())) {
						layoutInfo = new LayoutInfo();
						module_list = new ArrayList<ModuleItem>();
					} else if ("File_Version".equals(parser.getName())) {
						String file_version = parser.nextText();
						layoutInfo.setFile_version(file_version);
					} else if ("Layout_Name".equals(parser.getName())) {
						String layout_name = parser.nextText();
						layoutInfo.setLayout_name(layout_name);
					} else if ("Layout_Des".equals(parser.getName())) {
						String describe = parser.nextText();
						layoutInfo.setDescribe(describe);
					} else if ("Editor".equals(parser.getName())) {
						String editor = parser.nextText();
						layoutInfo.setEditor(editor);
					} else if ("EditTime".equals(parser.getName())) {
						DateFormat formater = new SimpleDateFormat(
								"yyyy-MM-dd HH:mm:ss", Locale.getDefault());
						String edit_time_str = parser.nextText();
						Date edit_time = formater.parse(edit_time_str);
						layoutInfo.setEdit_time(edit_time);
					} else if ("Scr_Size".equals(parser.getName())) {
						String scr_size_str = parser.nextText();
						int index_mid = scr_size_str.indexOf(",");
						int index_end = scr_size_str.indexOf(")");
						// 截取屏幕宽、高值的字符串并设置。
						int screen_width = Integer.valueOf(scr_size_str.substring(
								1, index_mid).trim());
						int screen_height = Integer.valueOf(scr_size_str.substring(
								index_mid + 1, index_end).trim());
						layoutInfo.setScreen_width(screen_width);
						layoutInfo.setScreen_height(screen_height);
					} else if ("BKFile".equals(parser.getName())) {
						String bk_file = parser.nextText();
						String bk_filePath = path
								+ bk_file;
						File file=new File(bk_filePath);
						if(!file.exists()){
							bk_filePath = ConstantValue.ROOT_DIR + "media/"
									+ bk_file;
							
						}
						 
						layoutInfo.setBk_file(bk_filePath);
						
						
					} else if ("Module_Count".equals(parser.getName())) {
						int module_count = Integer.valueOf(parser.nextText());
						layoutInfo.setModule_count(module_count);
					} else if ("Module".equals(parser.getName())) {
						// <Module Name ="Video1" UID="8" GID="0"
						// Pos="(0,3,720,400)" ZOrder="1"/>
						// <Module Name ="Text1" UID="11" GID="10"
						// Pos="(0,400,720,50)" ZOrder="2"/>
						// <Module Name ="Text2" UID="12" GID="10"
						// Pos="(0,450,720,50)" ZOrder="3"/>
						moduleItem = new ModuleItem();
						String name = parser.getAttributeValue(0); // layout标签的第一个属性值（名称）
						moduleItem.setName(name);
						String uid_str = parser.getAttributeValue(1); // layout标签的第二个属性值（uid）
						int uid = Integer.valueOf(uid_str);
						moduleItem.setUid(uid);
						String gid_str = parser.getAttributeValue(2); // layout标签的第三个属性值（gid）
						int gid = Integer.valueOf(gid_str);
						moduleItem.setUid(gid);
						pos = new POS();
						String pos_str = parser.getAttributeValue(3); // layout标签的第四个属性值（pos）
						initXmlPos(pos, pos_str);
						int zorder = Integer.valueOf(parser.getAttributeValue(4)); // layout标签的第个属性值（Zorder）
						moduleItem.setZorder(zorder);
						module_list.add(moduleItem);
					}
					break;
				case XmlPullParser.END_TAG:
					if ("Layout".equals(parser.getName())) { // 解析完毕模板，将模块列表加入
						layoutInfo.setModule_list(module_list);
					}
					break;
				}
				type = parser.next(); // 让解析器 解析下一个节点tag
			}
		}catch(Exception e){
			LogUtil.e(TAG,"parseLayout出错 ", e);
			
		}finally{
			if(fis!=null){
				fis.close();
			}
		}
		
		return layoutInfo;
	}

	
	
	@Override
	public ArrayList<String> parseModuleCheck(String path) throws Exception {
		FileInputStream fis=null;
		try{
			file = new File(path);
			LogUtil.i(TAG, "parseModuleCheck module_path:  " + path);
			fis = new FileInputStream(file);// 获取待解析文件的输入流
			parser = Xml.newPullParser();
//			if(UserInfoSingleton.getPlayPath().endsWith("201/")||UserInfoSingleton.getPlayPath().endsWith("202/")){
//				parser.setInput(fis, ConstantValue.CHARSET);
//			}else{
//				parser.setInput(fis, ConstantValue.CHARSET_GB2312);
//			}
			parser.setInput(fis, ConstantValue.CHARSET_GB2312);
			int startPos = path.lastIndexOf("/") + 1; // 截取模块xml文件名，由文件名判断模块类型。
			String fileNameStr = path.substring(startPos); // 截取模块信息文件名。
			int type = parser.getEventType();// 获取解析器解析的事件类型
		
			if (fileNameStr.startsWith("VIDEO")) {
				
				return checkModuleVideo(type, parser,path);

			} 
		}catch(Exception e){
			LogUtil.e(TAG,"parseModuleCheck出错 ", e);
			return null;
		}finally{
			if(fis!=null){
				fis.close();
			}
		}
		
		return null;
	}
	
	public ArrayList<String> checkModuleVideo(int type,XmlPullParser parser,String path)throws Exception{
		ArrayList<String> fileList = null;
			while (type != XmlPullParser.END_DOCUMENT) {
				switch (type) {
				case XmlPullParser.START_TAG:// 标签或者节点开始时候的事件
					  if ("Local_List".equals(parser.getName())) {
						 
						  fileList = new ArrayList<String>();
						
					  }else if ("Item".equals(parser.getName())) {
						// <Item Filename="Video2.avi" Start_Time="04:00:00:00"
						// In_Point="00:00:10:30" Play_Length="01:30:00:00"
						// Volume="55" />
						 String fileName = parser.getAttributeValue(0).trim();
						 fileList.add(fileName);
//						 fileList.add(new String(fileName.getBytes(RecvBase.charset)));
					}
					break;
			
				}
				type = parser.next(); // 让解析器 解析下一个节点tag
			}
			
			return fileList;
	}
	
	/**
	 * 解析模块文件
	 * @param path 待解析xml文件的路径
	 * @throws Exception 找不到path路径文件的异常
	 * @return	模块文件信息的对象
	 */
	@Override
	public BaseModuleInfo parseModule(String path,String module_name) throws Exception {
		FileInputStream fis=null;
		try{
			String path1=path+module_name;
			
			String module_path=path+module_name+ ".XML";
			file = new File(module_path);
			if(!file.exists()){
				module_path = path +module_name+ ".xml"; // 当前播表文件路径
				file = new File(module_path);
				if(!file.exists()){
					return null;
				}
			}
			LogUtil.i(TAG, "module_path:  " + module_path);
			fis = new FileInputStream(file);// 获取待解析文件的输入流
			parser = Xml.newPullParser();
			if(UserInfoSingleton.getPlayPath().endsWith("201/")||UserInfoSingleton.getPlayPath().endsWith("202/")){
			
				parser.setInput(fis, ConstantValue.CHARSET);
				
			}else{
				parser.setInput(fis, ConstantValue.CHARSET_GB2312);
				
			}
		
			
			int startPos = path1.lastIndexOf("/") + 1; // 截取模块xml文件名，由文件名判断模块类型。
			String fileNameStr = path1.substring(startPos); // 截取模块信息文件名。
			int type = parser.getEventType();// 获取解析器解析的事件类型
		
			if (fileNameStr.startsWith("VIDEO")) {
				
				return parseModuleVideo(type, parser,path);

			} else if (fileNameStr.startsWith("TIME")) {
				
				return parseModuleTime(type, parser);
				
			} else if (fileNameStr.startsWith("DATE")) {
				
				return parseModuleDate(type, parser);
				
			} else if (fileNameStr.startsWith("COUNTDOWN")) {
				
				return parseModuleCountDown(type, parser);
				
			} else if (fileNameStr.startsWith("TEXT")) {
				
				return parseModuleText(type, parser);
				
			} else if (fileNameStr.startsWith("SCROLL")) {
			
				return parseModuleScroll(type, parser);
				
			} else if (fileNameStr.startsWith("PICSHOW")||fileNameStr.startsWith("IMAGE")) {
				
				return parseModuleImage(type, parser,path);
				
			} else if (fileNameStr.startsWith("EXIGENT")||fileNameStr.startsWith("exigent")) {
				
				return parseModuleExigent(type, parser,fis);
			}
		}catch(Exception e){
			LogUtil.e(TAG,"parseModule出错 ", e);
			return null;
		}finally{
			if(fis!=null){
				fis.close();
			}
		}
		
		return null;
	}
	
	
	/**
	 * 解析Video模块<br>
	 * 2014-5-4 下午3:03:44
	 * @param type
	 * @param parser
	 * @return
	 * @throws Exception
	 *
	 */
	public BaseModuleInfo parseModuleVideo(int type,XmlPullParser parser,String path)throws Exception{
		ArrayList<LocalPlayItem> localPlay_list = null;
		
		
			VideoInfoView videoInfo=null;

			while (type != XmlPullParser.END_DOCUMENT) {
				switch (type) {
				case XmlPullParser.START_TAG:// 标签或者节点开始时候的事件
					if ("PARAM".equals(parser.getName())) {
						videoInfo = new VideoInfoView();
						videoInfo.setModule_type(ConstantValue.MODULE_TYPE_VIDEO);
					} else if ("File_Version".equals(parser.getName())) {
						String file_version = parser.nextText();
						videoInfo.setFile_version(file_version);
					} else if ("Module_Name".equals(parser.getName())) {
						String module_name = parser.nextText();
						videoInfo.setModule_name(module_name);
					} else if ("Module_UID".equals(parser.getName())) {
						String uid_str = parser.nextText();
						int module_uid = Integer.valueOf(uid_str);
						videoInfo.setModule_uid(module_uid);
					} else if ("Module_GID".equals(parser.getName())) {
						String gid_str = parser.nextText();
						int module_gid = Integer.valueOf(gid_str);
						videoInfo.setModule_gid(module_gid);
					} else if ("Module_Pos".equals(parser.getName())) {
						pos = new POS();
						String pos_str = parser.nextText();
						initXmlPos(pos, pos_str);
						videoInfo.setModule_Pos(pos);
					} else if ("Is_Live".equals(parser.getName())) {
						boolean isLive;
						String isLive_str = parser.nextText();
						if ("0".equals(isLive_str)) {
							isLive = false;
						} else {
							isLive = true;
						}
						videoInfo.setLive(isLive);
					} else if ("Live_Channel".equals(parser.getName())) {
						
						String live_channel = parser.nextText();
						live_channel=live_channel.substring(live_channel.indexOf("(")+1, live_channel.indexOf(")"));
						videoInfo.setLive_channel(live_channel);
//						GlobalParamInfo.getInstance().setLive_url(live_channel);
						
					} else if ("Live_Volume".equals(parser.getName())) {
						String live_volume_str = parser.nextText();
						int live_volume = Integer.valueOf(live_volume_str);
						videoInfo.setLive_volume(live_volume);
					} else if ("Local_List".equals(parser.getName())) {
						localPlay_list = new ArrayList<LocalPlayItem>();
					} else if ("Item".equals(parser.getName())) {
						// <Item Filename="Video2.avi" Start_Time="04:00:00:00"
						// In_Point="00:00:10:30" Play_Length="01:30:00:00"
						// Volume="55" />
						LocalPlayItem localPlayItem = new LocalPlayItem();
						String fileName = parser.getAttributeValue(0).trim();
						String filePath = path+ fileName;
						
//						String filePath= ConstantValue.ROOT_SDCARD_DIR + "Media1/"
//								+ fileName;
						file = new File(filePath);
						//先从此目录下找资源文件，如果没有找到 就需要在media目录下寻找
						if(!file.exists()){
							filePath = ConstantValue.ROOT_DIR + "media/"
									+ fileName;
							file = new File(filePath);
						}
						localPlayItem.setFile(file);

						String start_frame_str = parser.getAttributeValue(1);
						frame = new Frame();
						initXmlFrame(start_frame_str, frame);
						localPlayItem.setStart_frame(frame); // 开始播放时间

						String in_point_str = parser.getAttributeValue(2);
						frame = new Frame();
						initXmlFrame(in_point_str, frame);
						localPlayItem.setIn_point(frame); // 视频开始位置

						String play_length_str = parser.getAttributeValue(3);
						frame = new Frame();
						initXmlFrame(play_length_str, frame);
						localPlayItem.setPlay_length(frame); // 视频播放时长

						String volume_str = parser.getAttributeValue(4);
						int volume = Integer.valueOf(volume_str);
						localPlayItem.setVolume(volume);

						localPlay_list.add(localPlayItem);
					}
					break;
				case XmlPullParser.END_TAG:
					if ("Local_List".equals(parser.getName())) { // 解析完毕模板，将模块列表加入
						videoInfo.setLocal_list(localPlay_list);
					}
					break;
				}
				type = parser.next(); // 让解析器 解析下一个节点tag
			}
			return videoInfo;
		
	}
	/**
	 * 解析Time模块<br>
	 * 2014-5-4 下午3:05:06
	 * @param type
	 * @param parser
	 * @return
	 * @throws Exception
	 *
	 */
	public BaseModuleInfo parseModuleTime(int type,XmlPullParser parser)throws Exception{
		TimeInfo timeInfo = null;

		// <PARAM>
		// <File_Version>1</File_Version>
		// <Module_Name>Time1</Module_Name >
		// <Module_UID>6</Module_UID>
		// <Module_GID>0</Module_GID>
		// <Module_Pos>(600,0,120,50)</Module_Pos>
		// <Backgroud Type="3" PureColor="(0,0,0,255)"
		// GradientColor1="(0,0,0,255)"
		// GradientColor2="(0,0,0,255)" BKFile="" GradientColorType="0"/>
		// <Align>5</Align>
		// <Left_Margin>0</Left_Margin>
		// <Top_Margin>0</Top_Margin>
		// <Time_Type>0</Time_Type>
		// <Font Name="宋体" Size="40" Width="0" Escapement="0"
		// Orientation="0"
		// Kerning="0" Spacing="0" Bold="0" Italic="0" Underline="0"
		// FaceColor="(0,0,0,255)" EdgeWidth="0" EdgeColor="(0,0,0,255)"
		// ShadowWidth="0" ShadowColor="(0,0,0,255)" ShadowAngle="0" />
		// <Show_Second>1</Show_Second>
		// <AnalogClock>""</AnalogClock>
		// </PARAM>
		while (type != XmlPullParser.END_DOCUMENT) {
			switch (type) {
			case XmlPullParser.START_TAG:// 标签或者节点开始时候的事件
				if ("PARAM".equals(parser.getName())) {
					timeInfo = new TimeInfo();
					timeInfo.setModule_type(ConstantValue.MODULE_TYPE_TIME); // 设置类型的标志位
				} else if ("File_Version".equals(parser.getName())) {
					String file_version = parser.nextText();
					timeInfo.setFile_version(file_version);
				} else if ("Module_Name".equals(parser.getName())) {
					String module_name = parser.nextText();
					timeInfo.setModule_name(module_name);
				} else if ("Module_UID".equals(parser.getName())) {
					String uid_str = parser.nextText();
					int module_uid = Integer.valueOf(uid_str);
					timeInfo.setModule_uid(module_uid);
				} else if ("Module_GID".equals(parser.getName())) {
					String gid_str = parser.nextText();
					int module_gid = Integer.valueOf(gid_str);
					timeInfo.setModule_gid(module_gid);
				} else if ("Module_Pos".equals(parser.getName())) {
					pos = new POS();
					String pos_str = parser.nextText();
					initXmlPos(pos, pos_str);
					timeInfo.setModule_Pos(pos);
				} else if ("Backgroud".equals(parser.getName())) {
					backgroud = new BackParam();
					initXmlBackground(backgroud);
					timeInfo.setBackgroud(backgroud);
				} else if ("Align".equals(parser.getName())) {
					String align_str = parser.nextText();
					int align = Integer.valueOf(align_str);
					if (align == 1) {
						timeInfo.setAlign(AlignMode.LOWLEFT);
					} else if (align == 2) {
						timeInfo.setAlign(AlignMode.LOWMIDDLE);
					} else if (align == 3) {
						timeInfo.setAlign(AlignMode.LOWRIGHT);
					} else if (align == 4) {
						timeInfo.setAlign(AlignMode.MIDDLELEFT);
					} else if (align == 5) {
						timeInfo.setAlign(AlignMode.CENTER);
					} else if (align == 6) {
						timeInfo.setAlign(AlignMode.MIDDLERIGHT);
					} else if (align == 7) {
						timeInfo.setAlign(AlignMode.UPLEFT);
					} else if (align == 8) {
						timeInfo.setAlign(AlignMode.UPMIDDLE);
					} else if (align == 9) {
						timeInfo.setAlign(AlignMode.UPRIGHT);
					}
				} else if ("Left_Margin".equals(parser.getName())) {
					String left_margin_str = parser.nextText();
					int left_margin = Integer.valueOf(left_margin_str);
					timeInfo.setLeft_margin(left_margin);
				} else if ("Top_Margin".equals(parser.getName())) {
					String top_margin_str = parser.nextText();
					int top_margin = Integer.valueOf(top_margin_str);
					timeInfo.setTop_margin(top_margin);

				} else if ("Time_Type".equals(parser.getName())) {
					String time_type_str = parser.nextText();
					int time_type = Integer.valueOf(time_type_str);
					if (time_type == 0) {
						timeInfo.setTime_type(ClockType.DIGITALCLOCK);
					} else {
						timeInfo.setTime_type(ClockType.SIMULATECLOCK);
					}
				} else if ("Font".equals(parser.getName())) {
					FontParam fontParam = new FontParam();
					initXmlFontParam(fontParam);
					timeInfo.setFont(fontParam);
				} else if ("Show_Second".equals(parser.getName())) {
					String show_second_str = parser.nextText();
					int show_second = Integer.valueOf(show_second_str);
					if (show_second == 0) {
						timeInfo.setShow_second(false);
					} else {
						timeInfo.setShow_second(true);
					}
				} else if ("AnalogClock".equals(parser.getName())) { // 模拟时钟文件
					String anaClockFile_name = parser.nextText();
					String anaClockFile_path = ConstantValue.ROOT_DIR
							+ "media/" + anaClockFile_name;
					File analogclock = new File(anaClockFile_path);
					timeInfo.setAnalogclock(analogclock);
				}
				break;
			case XmlPullParser.END_TAG:
				break;
			}
			type = parser.next(); // 让解析器 解析下一个节点tag
		}
		return timeInfo;
	}
	/**
	 * 解析Date模块<br>
	 * 2014-5-4 下午3:14:04
	 * @param type
	 * @param parser
	 * @return
	 * @throws Exception
	 *
	 */
	public BaseModuleInfo parseModuleDate(int type,XmlPullParser parser)throws Exception{
		DateInfo dateInfo = null;

		// <PARAM>
		// <File_Version>1</File_Version>
		// <Module_Name>Date1</Module_Name >
		// <Module_UID>5</Module_UID>
		// <Module_GID>0</Module_GID>
		// <Module_Pos>(720,150,400,100)</Module_Pos>
		// <Backgroud Type="3" PureColor="(200,0,0,255)"
		// GradientColor1="(200,0,0,255)"
		// GradientColor2="(100,0,0,255)" BKFile="" GradientColorType="0"/>
		// <Align>5</Align>
		// <Left_Margin>0</Left_Margin>
		// <Top_Margin>0</Top_Margin>
		// <Show_Date>1</Show_Date>
		// <Date_Lang>1</Date_Lang>
		// <Date_Param Show_Seq="0" Year_Show="4" MD_Show="1"
		// Year_Tip="年" Month_Tip="月" Day_Tip="日" />
		// <Date_Font Name="宋体" Size="40" Width="0" Escapement="0"
		// Orientation="0"
		// Kerning="0" Spacing="0" Bold="0" Italic="0" Underline="0"
		// FaceColor="(250,0,0,255)" EdgeWidth="0" EdgeColor="(200,0,0,255)"
		// ShadowWidth="0" ShadowColor="(250,0,0,255)" ShadowAngle="0" />
		// <Show_Week>1</Show_Week>
		// <Week_Lang>1</Week_Lang>
		// <Week_Font Name="宋体" Size="40" Width="0" Escapement="0"
		// Orientation="0"
		// Kerning="0" Spacing="0" Bold="0" Italic="0" Underline="0"
		// FaceColor="(250,0,0,255)" EdgeWidth="0" EdgeColor="(100,0,0,255)"
		// ShadowWidth="0" ShadowColor="(100,0,0,255)" ShadowAngle="0" />
		// </PARAM>

		while (type != XmlPullParser.END_DOCUMENT) {
			switch (type) {
			case XmlPullParser.START_TAG:// 标签或者节点开始时候的事件
				if ("PARAM".equals(parser.getName())) {
					dateInfo = new DateInfo();
					dateInfo.setModule_type(ConstantValue.MODULE_TYPE_DATE); // 设置类型的标志位
				} else if ("File_Version".equals(parser.getName())) {
					String file_version = parser.nextText();
					dateInfo.setFile_version(file_version);
				} else if ("Module_Name".equals(parser.getName())) {
					String module_name = parser.nextText();
					dateInfo.setModule_name(module_name);
				} else if ("Module_UID".equals(parser.getName())) {
					String uid_str = parser.nextText();
					int module_uid = Integer.valueOf(uid_str);
					dateInfo.setModule_uid(module_uid);
				} else if ("Module_GID".equals(parser.getName())) {
					String gid_str = parser.nextText();
					int module_gid = Integer.valueOf(gid_str);
					dateInfo.setModule_gid(module_gid);
				} else if ("Module_Pos".equals(parser.getName())) {
					pos = new POS();
					String pos_str = parser.nextText();
					initXmlPos(pos, pos_str);
					dateInfo.setModule_Pos(pos);
				} else if ("Backgroud".equals(parser.getName())) {
					backgroud = new BackParam();
					initXmlBackground(backgroud);
					dateInfo.setBackgroud(backgroud);
				} else if ("Align".equals(parser.getName())) {
					String align_str = parser.nextText();
					int align = Integer.valueOf(align_str);
					if (align == 1) {
						dateInfo.setAlign(AlignMode.LOWLEFT);
					} else if (align == 2) {
						dateInfo.setAlign(AlignMode.LOWMIDDLE);
					} else if (align == 3) {
						dateInfo.setAlign(AlignMode.LOWRIGHT);
					} else if (align == 4) {
						dateInfo.setAlign(AlignMode.MIDDLELEFT);
					} else if (align == 5) {
						dateInfo.setAlign(AlignMode.CENTER);
					} else if (align == 6) {
						dateInfo.setAlign(AlignMode.MIDDLERIGHT);
					} else if (align == 7) {
						dateInfo.setAlign(AlignMode.UPLEFT);
					} else if (align == 8) {
						dateInfo.setAlign(AlignMode.UPMIDDLE);
					} else if (align == 9) {
						dateInfo.setAlign(AlignMode.UPRIGHT);
					}
				} else if ("Left_Margin".equals(parser.getName())) {
					String left_margin_str = parser.nextText();
					int left_margin = Integer.valueOf(left_margin_str);
					dateInfo.setLeft_margin(left_margin);
				} else if ("Top_Margin".equals(parser.getName())) {
					String top_margin_str = parser.nextText();
					int top_margin = Integer.valueOf(top_margin_str);
					dateInfo.setTop_margin(top_margin);

				} else if ("Show_Date".equals(parser.getName())) {
					String show_date_str = parser.nextText();
					int show_date = Integer.valueOf(show_date_str);
					if (show_date == 0) {
						dateInfo.setShow_date(false);
					} else {
						dateInfo.setShow_date(true);
					}
				} else if ("Date_Lang".equals(parser.getName())) {
					String date_Lang_str = parser.nextText();
					int date_Lang = Integer.valueOf(date_Lang_str);
					if (date_Lang == 1) {
						dateInfo.setDate_Lang(ShowLang.CHINESE);
					} else if (date_Lang == 2) {
						dateInfo.setDate_Lang(ShowLang.ENGLISH);
					} else if (date_Lang == 3) {
						dateInfo.setDate_Lang(ShowLang.CNANDEN);
					} else if (date_Lang == 4) {
						dateInfo.setDate_Lang(ShowLang.DIGITAL);
					}
				} else if ("Date_Param".equals(parser.getName())) {
					DateParam date_param = new DateParam();
					String show_seq_str = parser.getAttributeValue(0);
					int show_seq = Integer.valueOf(show_seq_str);
					if (show_seq == 0) {
						date_param.setShow_seq(DateShow.YMD);
					} else if (show_seq == 1) {
						date_param.setShow_seq(DateShow.MDY);
					} else if (show_seq == 2) {
						date_param.setShow_seq(DateShow.DMY);
					}
					String year_show_str = parser.getAttributeValue(1);
					int year_show = Integer.valueOf(year_show_str);
					if (year_show == 0) {
						date_param.setYear_show(YearShow.NOTSHOW);
					} else if (year_show == 2) {
						date_param.setYear_show(YearShow.SHOWTWO);
					} else if (year_show == 4) {
						date_param.setYear_show(YearShow.SHOWFOUR);
					}

					String mD_Show_str = parser.getAttributeValue(2);
					int mD_Show = Integer.valueOf(mD_Show_str);
					if (mD_Show == 1) {
						date_param.setMD_Show(MDShow.NOZERO);
					} else if (mD_Show == 2) {
						date_param.setMD_Show(MDShow.ADDZERO);
					}
					String year_tip = parser.getAttributeValue(3);
					date_param.setYear_tip(year_tip);
					String month_tip = parser.getAttributeValue(4);
					date_param.setMonth_tip(month_tip);
					String day_tip = parser.getAttributeValue(5);
					date_param.setDay_tip(day_tip);
					dateInfo.setDate_param(date_param);
				} else if ("Date_Font".equals(parser.getName())) {
					FontParam date_font = new FontParam();
					initXmlFontParam(date_font);
					dateInfo.setDate_font(date_font);
				} else if ("Show_Week".equals(parser.getName())) {
					String show_week_str = parser.nextText();
					int show_week = Integer.valueOf(show_week_str);
					if (show_week == 0) {
						dateInfo.setShow_week(false);
					} else {
						dateInfo.setShow_week(true);
					}
				} else if ("Week_Lang".equals(parser.getName())) {
					String week_lang_str = parser.nextText();
					int week_lang = Integer.valueOf(week_lang_str);
					if (week_lang == 1) {
						dateInfo.setWeek_lang(ShowLang.CHINESE);
					} else if (week_lang == 2) {
						dateInfo.setWeek_lang(ShowLang.ENGLISH);
					} else if (week_lang == 3) {
						dateInfo.setWeek_lang(ShowLang.CNANDEN);
					} else if (week_lang == 4) {
						dateInfo.setWeek_lang(ShowLang.DIGITAL);
					}
				} else if ("Week_Font".equals(parser.getName())) {
					FontParam week_font = new FontParam();
					initXmlFontParam(week_font);
					dateInfo.setWeek_font(week_font);
				}
				break;
			case XmlPullParser.END_TAG:
				break;
			}
			type = parser.next(); // 让解析器 解析下一个节点tag
		}
		return dateInfo;
	}
	/**
	 * 解析CountDown模块<br>
	 * 2014-5-4 下午3:17:12
	 * @param type
	 * @param parser
	 * @return
	 * @throws Exception
	 *
	 */
	public BaseModuleInfo parseModuleCountDown(int type,XmlPullParser parser)throws Exception{
		CountDownInfo countDownInfo = null;
		ArrayList<ConvertItem> convertItem_list = null;
		ConvertItem convertItem;
		// <PARAM>
		// <File_Version>1</File_Version>
		// <Module_Name>CountDown1</Module_Name >
		// <Module_UID>11</Module_UID>
		// <Module_GID>10</Module_GID>
		// <Module_Pos>(400,100,320,200)</Module_Pos>
		// <Backgroud Type="3" PureColor="(0,0,0,255)"
		// GradientColor1="(0,0,0,255)"
		// GradientColor2="(0,0,0,255)" BKFile="" GradientColorType="0"/>
		// <Align>5</Align>
		// <Left_Margin>0</Left_Margin>
		// <Top_Margin>0</Top_Margin>
		// <Show_Lang>1</Show_Lang>
		// <Text_Show_Param>0</Text_Show_Param>
		// <Show_Second>0</Show_Second>
		// <Show_Interval>5</Show_Interval>
		// <Time_Font Name="宋体" Size="70" Width="0" Escapement="0"
		// Orientation="0"
		// Kerning="0" Spacing="0" Bold="0" Italic="0" Underline="0"
		// FaceColor="(255,0,0,255)" EdgeWidth="0" EdgeColor="(0,0,0,255)"
		// ShadowWidth="0" ShadowColor="(0,0,0,255)" ShadowAngle="0" />
		// <Tip_Font Name="宋体" Size="30" Width="0" Escapement="0"
		// Orientation="0"
		// Kerning="0" Spacing="0" Bold="0" Italic="0" Underline="0"
		// FaceColor="(0,0,0,255)" EdgeWidth="0" EdgeColor="(0,0,0,255)"
		// ShadowWidth="0" ShadowColor="(0,0,0,255)" ShadowAngle="0" />
		// <Convert_Param>
		// <Item Time="60" Content="列车即将到达" />
		// <Item Time="30" Content="列车进站" />
		// <Font Name="宋体" Size="45" Width="0" Escapement="0"
		// Orientation="0"
		// Kerning="0" Spacing="0" Bold="0" Italic="0" Underline="0"
		// FaceColor="(0,0,0,255)" EdgeWidth="0" EdgeColor="(0,0,0,255)"
		// ShadowWidth="0" ShadowColor="(0,0,0,255)" ShadowAngle="0" />
		// </Convert_Param>
		// </PARAM>

		while (type != XmlPullParser.END_DOCUMENT) {
			switch (type) {
			case XmlPullParser.START_TAG:// 标签或者节点开始时候的事件
				if ("PARAM".equals(parser.getName())) {
					countDownInfo = new CountDownInfo();
					countDownInfo.setModule_type(ConstantValue.MODULE_TYPE_COUNTDOWN); // 设置类型的标志位
				} else if ("File_Version".equals(parser.getName())) {
					String file_version = parser.nextText();
					countDownInfo.setFile_version(file_version);
				} else if ("Module_Name".equals(parser.getName())) {
					String module_name = parser.nextText();
					countDownInfo.setModule_name(module_name);
				} else if ("Module_UID".equals(parser.getName())) {
					String uid_str = parser.nextText();
					int module_uid = Integer.valueOf(uid_str);
					countDownInfo.setModule_uid(module_uid);
				} else if ("Module_GID".equals(parser.getName())) {
					String gid_str = parser.nextText();
					int module_gid = Integer.valueOf(gid_str);
					countDownInfo.setModule_gid(module_gid);
				} else if ("Module_Pos".equals(parser.getName())) {
					pos = new POS();
					String pos_str = parser.nextText();
					initXmlPos(pos, pos_str);
					countDownInfo.setModule_Pos(pos);
				} else if ("Backgroud".equals(parser.getName())) {
					backgroud = new BackParam();
					initXmlBackground(backgroud);
					countDownInfo.setBackgroud(backgroud);
				} else if ("Align".equals(parser.getName())) {
					String align_str = parser.nextText();
					int align = Integer.valueOf(align_str);
					if (align == 1) {
						countDownInfo.setAlign(AlignMode.LOWLEFT);
					} else if (align == 2) {
						countDownInfo.setAlign(AlignMode.LOWMIDDLE);
					} else if (align == 3) {
						countDownInfo.setAlign(AlignMode.LOWRIGHT);
					} else if (align == 4) {
						countDownInfo.setAlign(AlignMode.MIDDLELEFT);
					} else if (align == 5) {
						countDownInfo.setAlign(AlignMode.CENTER);
					} else if (align == 6) {
						countDownInfo.setAlign(AlignMode.MIDDLERIGHT);
					} else if (align == 7) {
						countDownInfo.setAlign(AlignMode.UPLEFT);
					} else if (align == 8) {
						countDownInfo.setAlign(AlignMode.UPMIDDLE);
					} else if (align == 9) {
						countDownInfo.setAlign(AlignMode.UPRIGHT);
					}
				} else if ("Left_Margin".equals(parser.getName())) {
					String left_margin_str = parser.nextText();
					int left_margin = Integer.valueOf(left_margin_str);
					countDownInfo.setLeft_margin(left_margin);
				} else if ("Top_Margin".equals(parser.getName())) {
					String top_margin_str = parser.nextText();
					int top_margin = Integer.valueOf(top_margin_str);
					countDownInfo.setTop_margin(top_margin);
				} else if ("Show_Lang".equals(parser.getName())) {
					String show_lang_str = parser.nextText();
					int show_lang = Integer.valueOf(show_lang_str);
					if (show_lang == 1) {
						countDownInfo.setShow_lang(ShowLang.CHINESE);
					} else if (show_lang == 2) {
						countDownInfo.setShow_lang(ShowLang.ENGLISH);
					} else if (show_lang == 3) {
						countDownInfo.setShow_lang(ShowLang.CNANDEN);
					} else if (show_lang == 4) {
						countDownInfo.setShow_lang(ShowLang.DIGITAL);
					}
				} else if ("Text_Show_Param".equals(parser.getName())) {
					String show_type_str = parser.nextText();
					int show_type = Integer.valueOf(show_type_str);
					if (show_type == 0) {
						countDownInfo.setShow_type(ShowType.LEFTSCROLL);
					} else if (show_type == 1) {
						countDownInfo.setShow_type(ShowType.UPSCROLL);
					} else if (show_type == 2) {
						countDownInfo.setShow_type(ShowType.NOSCROLL);
					} else if (show_type == 3) {
						countDownInfo.setShow_type(ShowType.COMPRESS);
					}
				} else if ("Show_Second".equals(parser.getName())) {
					String show_second_str = parser.nextText();
					int show_second = Integer.valueOf(show_second_str);
					if (show_second == 0) {
						countDownInfo.setShow_second(false);
					} else {
						countDownInfo.setShow_second(true);
					}
				} else if ("Show_Interval".equals(parser.getName())) {
					String show_interval_str = parser.nextText();
					int show_interval = Integer.valueOf(show_interval_str);
					countDownInfo.setShow_interval(show_interval);
				} else if ("Time_Font".equals(parser.getName())) {
					FontParam time_font = new FontParam();
					initXmlFontParam(time_font);
					countDownInfo.setTime_font(time_font);
				} else if ("Tip_Font".equals(parser.getName())) {
					FontParam tip_font = new FontParam();
					initXmlFontParam(tip_font);
					countDownInfo.setTip_font(tip_font);
				} else if ("Convert_Param".equals(parser.getName())) {
					convertItem_list = new ArrayList<ConvertItem>();
				} else if ("Item".equals(parser.getName())) {
					convertItem = new ConvertItem();
					String time_str = parser.getAttributeValue(0);
					int time = Integer.valueOf(time_str);
					convertItem.setTime(time);
					String content = parser.getAttributeValue(1);
					convertItem.setContent(content);
					convertItem_list.add(convertItem);
				} else if ("Font".equals(parser.getName())) { // 转义字体
					FontParam convert_font = new FontParam();
					initXmlFontParam(convert_font);
					countDownInfo.setConvert_font(convert_font);
				}
				break;
			case XmlPullParser.END_TAG:
				if ("Convert_Param".equals(parser.getName())) {
					countDownInfo.setConvertItem_list(convertItem_list);
				}
				break;
			}
			type = parser.next(); // 让解析器 解析下一个节点tag
		}
		return countDownInfo;
	}
	/**
	 * 解析Text模块<br>
	 * 2014-5-4 下午3:37:52
	 * @param type
	 * @param parser
	 * @return
	 * @throws Exception
	 *
	 */
	public BaseModuleInfo parseModuleText(int type,XmlPullParser parser)throws Exception{
		TextInfo textInfo = null;
		ArrayList<String> text_list = null;

		// <PARAM>
		// <File_Version>1</File_Version>
		// <Module_Name>Text1</Module_Name >
		// <Module_UID>12</Module_UID>
		// <Module_GID>10</Module_GID>
		// <Module_Pos>(400,50,320,50)</Module_Pos>
		// <Backgroud Type="3" PureColor="(0,0,0,255)"
		// GradientColor1="(0,0,0,255)"
		// GradientColor2="(0,0,0,255)" BKFile="" GradientColorType="0"/>
		// <Align>4</Align>
		// <Left_Margin>0</Left_Margin>
		// <Top_Margin>0</Top_Margin>
		// <Show_Interval>10</Show_Interval>
		// <Text_Show_Param>0</Text_Show_Param>
		// <Font Name="宋体" Size="40" Width="0" Escapement="0"
		// Orientation="0"
		// Kerning="0" Spacing="0" Bold="0" Italic="0" Underline="0"
		// FaceColor="(0,0,0,255)" EdgeWidth="0" EdgeColor="(0,0,0,255)"
		// ShadowWidth="0" ShadowColor="(0,0,0,255)" ShadowAngle="0" />
		// <Text_List>
		// <Item Content="欢迎乘坐北京地铁" />
		// <Item Content="Wellcom to Beijing！" />
		// <Item Content="欢迎乘坐北京地铁10号线" />
		// <Item Content="欢迎各位领导莅临指导！" />
		// </Text_List>
		// </PARAM>
		while (type != XmlPullParser.END_DOCUMENT) {
			switch (type) {
			case XmlPullParser.START_TAG:// 标签或者节点开始时候的事件
				if ("PARAM".equals(parser.getName())) {
					textInfo = new TextInfo();
					textInfo.setModule_type(ConstantValue.MODULE_TYPE_TEXT); // 设置类型的标志位
				} else if ("File_Version".equals(parser.getName())) {
					String file_version = parser.nextText();
					textInfo.setFile_version(file_version);
				} else if ("Module_Name".equals(parser.getName())) {
					String module_name = parser.nextText();
					textInfo.setModule_name(module_name);
				} else if ("Module_UID".equals(parser.getName())) {
					String uid_str = parser.nextText();
					int module_uid = Integer.valueOf(uid_str);
					textInfo.setModule_uid(module_uid);
				} else if ("Module_GID".equals(parser.getName())) {
					String gid_str = parser.nextText();
					int module_gid = Integer.valueOf(gid_str);
					textInfo.setModule_gid(module_gid);
				} else if ("Module_Pos".equals(parser.getName())) {
					pos = new POS();
					String pos_str = parser.nextText();
					initXmlPos(pos, pos_str);
					textInfo.setModule_Pos(pos);
				} else if ("Backgroud".equals(parser.getName())) {
					backgroud = new BackParam();
					initXmlBackground(backgroud);
					textInfo.setBackgroud(backgroud);
				} else if ("Align".equals(parser.getName())) {
					String align_str = parser.nextText();
					int align = Integer.valueOf(align_str);
					if (align == 1) {
						textInfo.setAlign(AlignMode.LOWLEFT);
					} else if (align == 2) {
						textInfo.setAlign(AlignMode.LOWMIDDLE);
					} else if (align == 3) {
						textInfo.setAlign(AlignMode.LOWRIGHT);
					} else if (align == 4) {
						textInfo.setAlign(AlignMode.MIDDLELEFT);
					} else if (align == 5) {
						textInfo.setAlign(AlignMode.CENTER);
					} else if (align == 6) {
						textInfo.setAlign(AlignMode.MIDDLERIGHT);
					} else if (align == 7) {
						textInfo.setAlign(AlignMode.UPLEFT);
					} else if (align == 8) {
						textInfo.setAlign(AlignMode.UPMIDDLE);
					} else if (align == 9) {
						textInfo.setAlign(AlignMode.UPRIGHT);
					}
				} else if ("Left_Margin".equals(parser.getName())) {
					String left_margin_str = parser.nextText();
					int left_margin = Integer.valueOf(left_margin_str);
					textInfo.setLeft_margin(left_margin);
				} else if ("Top_Margin".equals(parser.getName())) {
					String top_margin_str = parser.nextText();
					int top_margin = Integer.valueOf(top_margin_str);
					textInfo.setTop_margin(top_margin);
				} else if ("Show_Interval".equals(parser.getName())) {
					String show_interval_str = parser.nextText();
					int show_interval = Integer.valueOf(show_interval_str);
					textInfo.setShow_interval(show_interval);
				} else if ("Text_Show_Param".equals(parser.getName())) {
					String show_type_str = parser.nextText();
					int show_type = Integer.valueOf(show_type_str);
					if (show_type == 0) {
						textInfo.setShow_type(ShowType.LEFTSCROLL);
					} else if (show_type == 1) {
						textInfo.setShow_type(ShowType.UPSCROLL);
					} else if (show_type == 2) {
						textInfo.setShow_type(ShowType.NOSCROLL);
					} else if (show_type == 3) {
						textInfo.setShow_type(ShowType.COMPRESS);
					}
				} else if ("Font".equals(parser.getName())) {
					FontParam fontParam = new FontParam();
					initXmlFontParam(fontParam);
					textInfo.setFont(fontParam);
				} else if ("Text_List".equals(parser.getName())) {
					text_list = new ArrayList<String>();
				} else if ("Item".equals(parser.getName())) {
					String content = parser.getAttributeValue(0);
					text_list.add(content);
				}
				break;
			case XmlPullParser.END_TAG:
				if ("Text_List".equals(parser.getName())) {
					textInfo.setText_list(text_list);
				}
				break;
			}
			type = parser.next(); // 让解析器 解析下一个节点tag
		}
		return textInfo;
	}
	/**
	 * 解析Scroll模块<br>
	 * 2014-5-4 下午3:39:28
	 * @param type
	 * @param parser
	 * @return
	 * @throws Exception
	 *
	 */
	public BaseModuleInfo parseModuleScroll(int type,XmlPullParser parser)throws Exception{
		ScrollInfo scrollInfo = null;
		ArrayList<String> text_list = null;
		// <PARAM>
		// <File_Version>1</File_Version>
		// <Module_Name>Scroll1</Module_Name >
		// <Module_UID>21</Module_UID>
		// <Module_GID>0</Module_GID>
		// <Module_Pos>(0,526,720,50)</Module_Pos>
		// <Backgroud Type="3" PureColor="(0,0,0,255)"
		// GradientColor1="(0,0,0,255)"
		// GradientColor2="(0,0,0,255)" BKFile="" GradientColorType="0"/>
		// <Align>5</Align>
		// <Left_Margin>0</Left_Margin>
		// <Top_Margin>0</Top_Margin>
		// <Scroll_Type>0</Scroll_Type>
		// <Scroll_Speed>25</Scroll_Speed>
		// <Font Name="宋体" Size="40" Width="0" Escapement="0"
		// Orientation="0"
		// Kerning="0" Spacing="0" Bold="0" Italic="0" Underline="0"
		// FaceColor="(0,0,0,255)" EdgeWidth="0" EdgeColor="(0,0,0,255)"
		// ShadowWidth="0" ShadowColor="(0,0,0,255)" ShadowAngle="0" />
		// <Text_List>
		// <Item Content="欢迎乘坐北京地铁" />
		// <Item Content="Wellcom to Beijing！" />
		// <Item Content="欢迎乘坐北京地铁10号线" />
		// <Item Content="欢迎各位领导莅临指导！" />
		// </Text_List>
		// </PARAM>
		while (type != XmlPullParser.END_DOCUMENT) {
			switch (type) {
			case XmlPullParser.START_TAG:// 标签或者节点开始时候的事件
				if ("PARAM".equals(parser.getName())) {
					scrollInfo = new ScrollInfo();
					scrollInfo.setModule_type(ConstantValue.MODULE_TYPE_SCROLL); // 设置类型的标志位
				} else if ("File_Version".equals(parser.getName())) {
					String file_version = parser.nextText();
					scrollInfo.setFile_version(file_version);
				} else if ("Module_Name".equals(parser.getName())) {
					String module_name = parser.nextText();
					scrollInfo.setModule_name(module_name);
				} else if ("Module_UID".equals(parser.getName())) {
					String uid_str = parser.nextText();
					int module_uid = Integer.valueOf(uid_str);
					scrollInfo.setModule_uid(module_uid);
				} else if ("Module_GID".equals(parser.getName())) {
					String gid_str = parser.nextText();
					int module_gid = Integer.valueOf(gid_str);
					scrollInfo.setModule_gid(module_gid);
				} else if ("Module_Pos".equals(parser.getName())) {
					pos = new POS();
					String pos_str = parser.nextText();
					initXmlPos(pos, pos_str);
					scrollInfo.setModule_Pos(pos);
				} else if ("Backgroud".equals(parser.getName())) {
					backgroud = new BackParam();
					initXmlBackground(backgroud);
					scrollInfo.setBackgroud(backgroud);
				} else if ("Align".equals(parser.getName())) {
					String align_str = parser.nextText();
					int align = Integer.valueOf(align_str);
					if (align == 1) {
						scrollInfo.setAlign(AlignMode.LOWLEFT);
					} else if (align == 2) {
						scrollInfo.setAlign(AlignMode.LOWMIDDLE);
					} else if (align == 3) {
						scrollInfo.setAlign(AlignMode.LOWRIGHT);
					} else if (align == 4) {
						scrollInfo.setAlign(AlignMode.MIDDLELEFT);
					} else if (align == 5) {
						scrollInfo.setAlign(AlignMode.CENTER);
					} else if (align == 6) {
						scrollInfo.setAlign(AlignMode.MIDDLERIGHT);
					} else if (align == 7) {
						scrollInfo.setAlign(AlignMode.UPLEFT);
					} else if (align == 8) {
						scrollInfo.setAlign(AlignMode.UPMIDDLE);
					} else if (align == 9) {
						scrollInfo.setAlign(AlignMode.UPRIGHT);
					}
				} else if ("Left_Margin".equals(parser.getName())) {
					String left_margin_str = parser.nextText();
					int left_margin = Integer.valueOf(left_margin_str);
					scrollInfo.setLeft_margin(left_margin);
				} else if ("Top_Margin".equals(parser.getName())) {
					String top_margin_str = parser.nextText();
					int top_margin = Integer.valueOf(top_margin_str);
					scrollInfo.setTop_margin(top_margin);
				} else if ("Scroll_Type".equals(parser.getName())) {
					String scroll_type_str = parser.nextText();
					int scroll_type = Integer.valueOf(scroll_type_str);
					if (scroll_type == 0) {
						scrollInfo.setScroll_type(ShowType.LEFTSCROLL);
					} else if (scroll_type == 1) {
						scrollInfo.setScroll_type(ShowType.UPSCROLL);
					} else if (scroll_type == 2) {
						scrollInfo.setScroll_type(ShowType.NOSCROLL);
					} else if (scroll_type == 3) {
						scrollInfo.setScroll_type(ShowType.COMPRESS);
					}
				} else if ("Scroll_Speed".equals(parser.getName())) {
					String scroll_speed_str = parser.nextText();
					int scroll_speed = Integer.valueOf(scroll_speed_str);
					scrollInfo.setScroll_speed(scroll_speed);
				} else if ("Font".equals(parser.getName())) {
					FontParam fontParam = new FontParam();
					initXmlFontParam(fontParam);
					scrollInfo.setFont(fontParam);
				} else if ("Text_List".equals(parser.getName())) {
					text_list = new ArrayList<String>();
				} else if ("Item".equals(parser.getName())) {
					String content = parser.getAttributeValue(0);
					text_list.add(content);
				}
				break;
			case XmlPullParser.END_TAG:
				if ("Text_List".equals(parser.getName())) {
					scrollInfo.setText_list(text_list);
				}
				break;
			}
			type = parser.next(); // 让解析器 解析下一个节点tag
		}

		return scrollInfo;
	}
	/**
	 * 解析Image模块<br>
	 * 2014-5-4 下午3:49:25
	 * @param type
	 * @param parser
	 * @return
	 * @throws Exception
	 *
	 */
	public BaseModuleInfo parseModuleImage(int type,XmlPullParser parser,String path)throws Exception{
		PicShowInfo picShowInfo = null;
		ArrayList<File> pic_list = null;

		// <PARAM>
		// <File_Version>1</File_Version>
		// <Module_Name>PicShow1</Module_Name >
		// <Module_UID>4</Module_UID>
		// <Module_GID>0</Module_GID>
		// <Module_Pos>(300,50,420,250)</Module_Pos>
		// <Backgroud Type="3" PureColor="(0,0,0,255)"
		// GradientColor1="(0,0,0,255)"
		// GradientColor2="(0,0,0,255)" BKFile="" GradientColorType="0"/>
		// <Show_Interval>10</Show_Interval>
		// <Pic_List>
		// <Item Pic="show1.jpg" />
		// <Item Pic="show2.tga" />
		// <Item Pic="pic3.png" />
		// <Item Pic="paly.swf" />
		// </Pic_List>
		// </PARAM>

		while (type != XmlPullParser.END_DOCUMENT) {
			switch (type) {
			case XmlPullParser.START_TAG:// 标签或者节点开始时候的事件
				if ("PARAM".equals(parser.getName())) {
					picShowInfo = new PicShowInfo();
					picShowInfo.setModule_type(ConstantValue.MODULE_TYPE_PIC); // 设置类型的标志位
				} else if ("File_Version".equals(parser.getName())) {
					String file_version = parser.nextText();
					picShowInfo.setFile_version(file_version);
				} else if ("Module_Name".equals(parser.getName())) {
					String module_name = parser.nextText();
					picShowInfo.setModule_name(module_name);
				} else if ("Module_UID".equals(parser.getName())) {
					String uid_str = parser.nextText();
					int module_uid = Integer.valueOf(uid_str);
					picShowInfo.setModule_uid(module_uid);
				} else if ("Module_GID".equals(parser.getName())) {
					String gid_str = parser.nextText();
					int module_gid = Integer.valueOf(gid_str);
					picShowInfo.setModule_gid(module_gid);
				} else if ("Module_Pos".equals(parser.getName())) {
					pos = new POS();
					String pos_str = parser.nextText();
					initXmlPos(pos, pos_str);
					picShowInfo.setModule_Pos(pos);
				} else if ("Backgroud".equals(parser.getName())) {
					backgroud = new BackParam();
					initXmlBackground(backgroud);
					picShowInfo.setBackgroud(backgroud);
				} else if ("Show_Interval".equals(parser.getName())) {
					String show_interval_str = parser.nextText();
					int show_interval = Integer.valueOf(show_interval_str);
					picShowInfo.setShow_interval(show_interval);
				} else if ("Pic_List".equals(parser.getName())) {
					pic_list = new ArrayList<File>();
				} else if ("Item".equals(parser.getName())) {
					String fileName = parser.getAttributeValue(0);
					String filePath = ConstantValue.ROOT_DIR + "media/"
							+ fileName;
					file = new File(filePath);
					if(!file.exists()){
						filePath=path+fileName;
						file=new File(filePath);
					}
					pic_list.add(file);
				}
				break;
			case XmlPullParser.END_TAG:
				if ("Pic_List".equals(parser.getName())) {
					picShowInfo.setPic_list(pic_list);
				}
				break;
			}
			type = parser.next(); // 让解析器 解析下一个节点tag
		}
		return picShowInfo;
	}
	/**
	 * 解析Exigent模块<br>
	 * 2014-5-4 下午3:53:16
	 * @param type
	 * @param parser
	 * @return
	 * @throws Exception
	 *
	 */
	public BaseModuleInfo parseModuleExigent(int type,XmlPullParser parser,FileInputStream fis)throws Exception{
		ExigentInfo exigentInfo = null;

		while (type != XmlPullParser.END_DOCUMENT) {
			switch (type) {
			case XmlPullParser.START_TAG:// 标签或者节点开始时候的事件
				if ("PARAM".equals(parser.getName())) {
					exigentInfo = new ExigentInfo();
					exigentInfo.setModule_type(ConstantValue.MODULE_TYPE_EXIGENT); // 设置类型的标志位
				} else if ("File_Version".equals(parser.getName())) {
					String file_version = parser.nextText();
					exigentInfo.setFile_version(file_version);
				} else if ("Module_Name".equals(parser.getName())) {
					String module_name = parser.nextText();
					exigentInfo.setModule_name(module_name);
				} else if ("Module_UID".equals(parser.getName())) {
					String uid_str = parser.nextText();
					int module_uid = Integer.valueOf(uid_str);
					exigentInfo.setModule_uid(module_uid);
				} else if ("Module_GID".equals(parser.getName())) {
					String gid_str = parser.nextText();
					int module_gid = Integer.valueOf(gid_str);
					exigentInfo.setModule_gid(module_gid);
				} else if ("Module_Pos".equals(parser.getName())) {
					pos = new POS();
					String pos_str = parser.nextText();
					initXmlPos(pos, pos_str);
					exigentInfo.setModule_Pos(pos);
				} else if ("Backgroud".equals(parser.getName())) {
					backgroud = new BackParam();
					initXmlBackground(backgroud);
					exigentInfo.setBackgroud(backgroud);
				} else if ("Align".equals(parser.getName())) {
					String align_str = parser.nextText();
					int align = Integer.valueOf(align_str);
					if (align == 1) {
						exigentInfo.setAlign(AlignMode.LOWLEFT);
					} else if (align == 2) {
						exigentInfo.setAlign(AlignMode.LOWMIDDLE);
					} else if (align == 3) {
						exigentInfo.setAlign(AlignMode.LOWRIGHT);
					} else if (align == 4) {
						exigentInfo.setAlign(AlignMode.MIDDLELEFT);
					} else if (align == 5) {
						exigentInfo.setAlign(AlignMode.CENTER);
					} else if (align == 6) {
						exigentInfo.setAlign(AlignMode.MIDDLERIGHT);
					} else if (align == 7) {
						exigentInfo.setAlign(AlignMode.UPLEFT);
					} else if (align == 8) {
						exigentInfo.setAlign(AlignMode.UPMIDDLE);
					} else if (align == 9) {
						exigentInfo.setAlign(AlignMode.UPRIGHT);
					}
				} else if ("Left_Margin".equals(parser.getName())) {
					String left_margin_str = parser.nextText();
					int left_margin = Integer.valueOf(left_margin_str);
					exigentInfo.setLeft_margin(left_margin);
				} else if ("Top_Margin".equals(parser.getName())) {
					String top_margin_str = parser.nextText();
					int top_margin = Integer.valueOf(top_margin_str);
					exigentInfo.setTop_margin(top_margin);
				} else if ("Font".equals(parser.getName())) {
					FontParam fontParam = new FontParam();
					initXmlFontParam(fontParam);
					exigentInfo.setFont(fontParam);
				} else if ("Show_Type".equals(parser.getName())) {
					String show_type_str = parser.nextText();
					int show_type = Integer.valueOf(show_type_str);
					if (show_type == 0) {
						exigentInfo.setShow_type(ShowType.LEFTSCROLL);
					} else if (show_type == 1) {
						exigentInfo.setShow_type(ShowType.UPSCROLL);
					} else if (show_type == 2) {
						exigentInfo.setShow_type(ShowType.NOSCROLL);
					} else if (show_type == 3) {
						exigentInfo.setShow_type(ShowType.COMPRESS);
					}
				} else if ("Scroll_Speed".equals(parser.getName())) {
					String scroll_speed_str = parser.nextText();
					int scroll_speed = Integer.valueOf(scroll_speed_str);
					exigentInfo.setScroll_speed(scroll_speed);
				} else if ("Min_Size".equals(parser.getName())) {
					String min_size_str = parser.nextText();
					int min_size = Integer.valueOf(min_size_str);
					exigentInfo.setMin_size(min_size);
				}
				break;
			case XmlPullParser.END_TAG:
				break;
			}
			type = parser.next(); // 让解析器 解析下一个节点tag
		}

		// <Font Name="宋体" Size="70" Width="0" Escapement="0"
		// Orientation="0"
		// Kerning="0" Spacing="0" Bold="0" Italic="0" Underline="0"
		// FaceColor="(0,0,0,255)" EdgeWidth="0" EdgeColor="(0,0,0,255)"
		// ShadowWidth="0" ShadowColor="(0,0,0,255)" ShadowAngle="0" />
		// <Show_Type>2</Show_Type>
		// <Scroll_Speed>25</Scroll_Speed>
		// <Min_Size >50</Min_Size>
		// </PARAM>
		if(fis!=null){
			fis.close();
		}
		return exigentInfo;
	}
	/**
	 * 解析Xml中的参数初始化字体对象
	 * 
	 * @param fontParam 字体
	 */
	void initXmlFontParam(FontParam fontParam) {
		String name = parser.getAttributeValue(0); // Name="宋体"
		fontParam.setName(name);
		String size_str = parser.getAttributeValue(1); // Size="40"
		int size = Integer.valueOf(size_str);
		fontParam.setSize(size);
		String width_str = parser.getAttributeValue(2); // Width
		int width = Integer.valueOf(width_str);
		fontParam.setWidth(width);
		String escapement_str = parser.getAttributeValue(3); // Escapement
		int escapement = Integer.valueOf(escapement_str);
		fontParam.setEscapement(escapement);
		String orientation_str = parser.getAttributeValue(4); // Orientation
		int orientation = Integer.valueOf(orientation_str);
		fontParam.setOrientation(orientation);
		String kerning_str = parser.getAttributeValue(5); // Kerning
		int kerning = Integer.valueOf(kerning_str);
		fontParam.setKerning(kerning);
		String spacing_str = parser.getAttributeValue(6); // Spacing
		int spacing = Integer.valueOf(spacing_str);
		fontParam.setSpacing(spacing);
		String bold_str = parser.getAttributeValue(7); // Bold
		int bold = Integer.valueOf(bold_str);
		if (bold == 0) {
			fontParam.setBold(false);
		} else {
			fontParam.setBold(true);
		}
		String italic_str = parser.getAttributeValue(8); // Italic
		int italic = Integer.valueOf(italic_str);
		if (italic == 0) {
			fontParam.setItalic(false);
		} else {
			fontParam.setItalic(true);
		}
		String underline_str = parser.getAttributeValue(9); // Underline
		int underline = Integer.valueOf(underline_str);
		if (underline == 0) {
			fontParam.setUnderline(false);
		} else {
			fontParam.setUnderline(true);
		}
		String faceColor_str = parser.getAttributeValue(10); // FaceColor

		color = new RGBA();
		initXmlColor(color, faceColor_str);
		fontParam.setFaceColor(color);
		String edgewidth_str = parser.getAttributeValue(11); // EdgeWidth
		int edgewidth = Integer.valueOf(edgewidth_str);
		fontParam.setEdgewidth(edgewidth);
		String edgeColor_str = parser.getAttributeValue(12); // EdgeColor
		color = new RGBA();
		initXmlColor(color, edgeColor_str);
		fontParam.setEdgeColor(color);
		String shadowWidth_str = parser.getAttributeValue(13); // ShadowWidth
		int shadowWidth = Integer.valueOf(shadowWidth_str);
		fontParam.setShadowWidth(shadowWidth);
		String shadowColor_str = parser.getAttributeValue(14); // ShadowColor
		color = new RGBA();
		initXmlColor(color, shadowColor_str);
		fontParam.setShadowColor(color);
		String shadowAngle_str = parser.getAttributeValue(15); // ShadowAngle
		int shadowAngle = Integer.valueOf(shadowAngle_str);
		fontParam.setShadowAngle(shadowAngle);
	}

	/**
	 * 解析Xml中的参数初始化背景对象
	 * 
	 * @param backgroud
	 *            背景
	 */
	void initXmlBackground(BackParam backgroud) {
		String back_type_str = parser.getAttributeValue(0);
		int back_type = Integer.valueOf(back_type_str);
		if (back_type == 0) {
			backgroud.setType(BackType.PURECOLOR);
		} else if (back_type == 1) {
			backgroud.setType(BackType.GRADIENTCOLOR);
		} else if (back_type == 2) {
			backgroud.setType(BackType.PICTURE);
		} else if (back_type == 3) {
			backgroud.setType(BackType.NOTSHOW);
		} else {
			LogUtil.i(TAG, "没有对应的背景类型： back_type = "
					+ back_type);
		}
		color = new RGBA();
		String purecolor_str = parser.getAttributeValue(1);
		initXmlColor(color, purecolor_str);
		backgroud.setPurecolor(color);
		color = new RGBA();
		String gradientcolor1_str = parser.getAttributeValue(2);
		initXmlColor(color, gradientcolor1_str);
		backgroud.setGradientcolor1(color);
		color = new RGBA();
		String gradientcolor2_str = parser.getAttributeValue(3);
		initXmlColor(color, gradientcolor2_str);
		backgroud.setGradientcolor2(color);
		color = new RGBA();
		String bkfile_name = parser.getAttributeValue(4);
		String bkfile_path = ConstantValue.ROOT_DIR + "media/" + bkfile_name;
		File bkfile = new File(bkfile_path);
		backgroud.setBkfile(bkfile);
		String colorType_str = parser.getAttributeValue(5);
		int colorType = Integer.valueOf(colorType_str);
		if (colorType == 0) {
			backgroud.setColorType(GradientColorType.HORIZONTALGRADIENT); // 水平渐变
		} else {
			backgroud.setColorType(GradientColorType.VERTICALGRADIENT); // 垂直渐变
		}
	}

	/**
	 * 用Xml的颜色字符串值初始化RGBA颜色对象
	 * 
	 * @param color
	 *            RGBA颜色对象
	 * @param color_str
	 *            Xml的颜色字符串值
	 */
	void initXmlColor(RGBA color, String color_str) {
		String[] split_pos = color_str.substring(1, color_str.length() - 1)
				.split(","); // 去掉（），用“，”分割得到纯数字的字符串
		int red = Integer.valueOf(split_pos[0]);
		int green = Integer.valueOf(split_pos[1]);
		int blue = Integer.valueOf(split_pos[2]);
		int alpha = Integer.valueOf(split_pos[3]);
		if(red>=240)red=240;
		if(green>=240)green=240;
		if(blue>=240)blue=240;
		if(red<=15)red=15;
		if(green<=15)green=15;
		if(blue<=15)blue=15;
		color.setRed(red);
		color.setGreen(green);
		color.setBlue(blue);
		color.setAlpha(alpha);
	}

	/**
	 * 用视频帧的字符串初始化视频帧对象
	 * 
	 * @param time_frame
	 *            视频帧的时间值
	 * @param frame_str
	 *            视频帧的字符串值
	 */
	void initXmlFrame(String frame_str, Frame time_frame) {
		int hour = 0;
		int minute = 0;
		int sec = 0;
		int frame = 0;
		if (!TextUtils.isEmpty(frame_str)) {
			String[] split_time = frame_str.split(":");
			hour = Integer.valueOf(split_time[0]);
			minute = Integer.valueOf(split_time[1]);
			sec = Integer.valueOf(split_time[2]);
			frame = Integer.valueOf(split_time[3]);
		}
		time_frame.setHour(hour);
		time_frame.setMinute(minute);
		time_frame.setSec(sec);
		time_frame.setFrame(frame);
	}

	/**
	 * 用模块位置的字符串初始化模块位置对象
	 * 
	 * @param pos
	 *            模块位置对象
	 * @param pos_str
	 *            xml中模块位置的字符串
	 */
	void initXmlPos(POS pos, String pos_str) {
		String[] split_pos = pos_str.substring(1, pos_str.length() - 1).split(
				","); // 去掉（），用“，”分割得到纯数字的字符串
		int left = Integer.valueOf(split_pos[0]);
		int top = Integer.valueOf(split_pos[1]);
		int width = Integer.valueOf(split_pos[2]);
		int height = Integer.valueOf(split_pos[3]);
		pos.setLeft(left);
		pos.setTop(top);
		pos.setWidth(width);
		pos.setHeight(height);
	}

}
